package persistencia;

import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Albaran;
import pojos.Articulos;
import pojos.Cliente;
import pojos.Empleados;
import pojos.Facturas;
import pojos.Gestiona;
import pojos.Lineasalb;
import pojos.Lineasfact;
import pojos.Lineasped;
import pojos.Pedido;
import pojos.Proveedor;

/**
 *
 * @author Javier
 */
public class ProveedoresDAO {
    
    private Session sesion;//ESTABLECE UNA SESION CON LA BASE DE DATOS
    private Transaction transaccion;//EJECUTA LAS SENTENCIAS 
    
    
     private void iniciarConexionConBBDD()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        sesion=HibernateUtil.getSessionFactory().openSession();//ABRIMOS UNA SESION
        transaccion=sesion.beginTransaction();//ARRANCA LA TRANSACCION
    }
    
    /**
     * ESTE METODO DEVUELVE UNA LISTA CON TODOS LO PROVEEDORES DE LA BASE DE DATOS
     * @return List<Proveedor>
     */
    public List<Proveedor> getProveedores()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        List<Proveedor> listaProveedores;
        iniciarConexionConBBDD();
        listaProveedores=sesion.createQuery("FROM Proveedor").list();
        sesion.close();
        
        return listaProveedores;      
    }
    
    /**
     * Devuelve el Proveedor buscado por su clave primaria
     * @param codProveedor
     * @return Proveedor
     */
    public List<Proveedor> getProveedor(int codProveedor)
    {
        List<Proveedor> listaProveedores;
        iniciarConexionConBBDD();
        listaProveedores=sesion.createQuery("FROM Proveedor where codProveedor="+codProveedor).list();
        sesion.close();
        
        return listaProveedores;       
    }
    
    /**
     * Busca en la BBDD todos los proveedores que tengan la poblacion
     * pasada como parametro
     * @param poblacion
     * @return listaProveedores con todos los proveedores con la misma poblacion
     */
    public List<Proveedor> getProveedoresXpoblacion(String poblacion)
    {
        List<Proveedor> listaProveedores;
        iniciarConexionConBBDD();
        listaProveedores=sesion.createQuery("FROM Proveedor where poblacion='"+poblacion+"'").list();
        sesion.close();
        
        return listaProveedores;       
    }
    
    /**
     * Busca en la BBDD una lista Proveedores que tenga como nombre
     * el pasado como parametro
     * @param nombre 
     * @return Proveedor
     */
    public List<Proveedor> getProveedorXnombre(String nombre)
    {
        List<Proveedor> listp;
        iniciarConexionConBBDD();
        listp=sesion.createQuery("from Proveedor where nombreProveedor='"+nombre+"'").list();
        sesion.close();
        
        return listp;       
    }
    
    public void addProveedor(Proveedor prov)
    {
        iniciarConexionConBBDD();
        sesion.save(prov);
        transaccion.commit();
        sesion.close();

    }
   
    public void eliminaProveedor(Proveedor prov) throws HibernateException{ 
        try { 
            iniciarConexionConBBDD(); 
            sesion.delete(prov); 
            transaccion.commit(); 
        } catch (HibernateException he) { 
            throw he; 
        } finally { 
            sesion.close(); 
        } 
    }
    
    public void actualizaProveedor(Proveedor prov) throws HibernateException{ 
        try { 
            iniciarConexionConBBDD(); 
            sesion.update(prov); 
            transaccion.commit(); 
        } catch (HibernateException he) {  
            throw he; 
        } finally { 
            sesion.close(); 
        } 
    }
      
}
